import axios from "axios";
import { getToken } from "./cookie";


// 不同的功能，通过axios请求的就是不同的接口地址
// 不同的接口地址有相同的前缀 ，使用baseURL来表示 localhost:19090/system/ -- 由于同源策略，在vite配置文件配置代理
const service = axios.create({
    baseURL: "/dev-api",  // baseURL不添加协议（http、https）会将前端的请求和端口拼接在请求地址前面 http://localhost:5173/dev-api
    timeout: 5000 , // 超时时间，单位毫秒，超时时间内没有返回响应，则请求超时，中断请求
}) 


// 同源策略:浏览器出于安全考虑，只允许同一源（协议 域名 端口 全部一致）的请求访问资源，否则就会出现跨域问题
// 协议不同，域名不同，端口不同 -- 都会发生跨域问题 
// 解决方案一 在vite文件修改前端服务端口和后端服务端口一致 -- 问题，同一台服务器端口被后端服务占用了，无法给前端服务使用 
// 解决方案二 通过代理服务器 设置代理服务器和前端同源 ，请求路径：前端 -- 代理服务器 -- 后端， 代理服务器不存在同源问题

// 代理服务器配置代码


// 添加拦截器，给请求添加请求头token
service.interceptors.request.use(
    (config) => {
        if(getToken()) {
            config.headers["Authorization"] = "Bearer " + getToken()
        }
        return config;
    },
    (error) => {
        return Promise.reject(error);
    }
)
// 添加拦截器，对响应结果进行处理
service.interceptors.response.use(
    // 请求成功发送 
    (res) => {
        const code = res.data.code;
        const msg = res.data.msg;
        if(code === 1000) {

            return Promise.resolve(res.data);
        } else {
            // 打印错误信息，并返回错误
            // ElMessage.error(loginRef.data.msg)
            console.log(msg);
            ElMessage.error(msg);
            return Promise.reject(new Error(msg));
        }
    },

    // 请求发送失败
    (error) => {
        return Promise.reject(error);
    }
)

export default service // 将service实例暴露给其他模块使用